#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>

int main()
{
	int sock = 0;
	int ret = 0;
	struct sockaddr_in addr;

	memset(&addr,0,sizeof(addr));
	addr.sin_family = AF_INET;
	addr.sin_port = htons(6868);
	addr.sin_addr.s_addr = inet_addr("127.0.0.1");

	sock = socket(AF_INET,SOCK_STREAM,0);
	if(sock == -1)
	{
		perror("socket");
		exit(-1);
	}

	ret = connect(sock,(struct sockaddr *)&addr,sizeof(struct sockaddr));
	if(ret == -1)
	{
		perror("connect");
		exit(-1);
	}

	char buf[1024] = {0};
	while(1)
	{
		printf("please input a string:\n");
		scanf("%s",buf);
		ret = send(sock,buf,strlen(buf),0);
		if(ret == -1)
		{
			perror("send");
			exit(-1);
		}
		//sleep(1);
		strcat(buf,"second");
		ret = send(sock,buf,strlen(buf),0);
		if(ret == -1)
		{
			perror("send");
			exit(-1);
		}
	    //sleep(1);
		strcat(buf,"third");
		ret = send(sock,buf,strlen(buf),0);
		if(ret == -1)
		{
			perror("send");
			exit(-1);
		}
		//sleep(1);
	}
	//1、客户端连续多次发送，底层将三次数据组织一个数据包发送，服务器端epoll_wait触发一次
	//  如果服务器设置设置为边沿触发，一次没有读取完，则剩余数据不在读取，阻塞在epoll_wait()中。
	//  如果服务器设置为水平触发，则可以多次读取接受缓冲区中的数据。
	//2、如果每隔1s发送一次数据，底层将每一次发送的数据都组织成一个数据包，服务器端epoll_wait针对每一个数据包
	//  都触发一次。

    close(sock);
	
	return 0;
}

